package com.joyzl.network.tls;

/**
 * 密码套件，支持的AEAD算法和HKDF哈希对，用于密钥导出计划和消息加密与解密
 * 
 * @author ZhangXi 2024年12月17日
 */
public interface CipherSuite {

	// RFC 2246

	short TLS_NULL_WITH_NULL_NULL = 0x0000;

	short TLS_RSA_WITH_NULL_MD5 = 0x0001;
	short TLS_RSA_WITH_NULL_SHA = 0x0002;
	short TLS_RSA_EXPORT_WITH_RC4_40_MD5 = 0x0003;
	short TLS_RSA_WITH_RC4_128_MD5 = 0x0004;
	short TLS_RSA_WITH_RC4_128_SHA = 0x0005;
	short TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x0006;
	short TLS_RSA_WITH_IDEA_CBC_SHA = 0x0007;
	short TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0008;
	short TLS_RSA_WITH_DES_CBC_SHA = 0x0009;
	short TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A;
	short TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x000B;
	short TLS_DH_DSS_WITH_DES_CBC_SHA = 0x000C;
	short TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x000D;
	short TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x000E;
	short TLS_DH_RSA_WITH_DES_CBC_SHA = 0x000F;
	short TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x0010;
	short TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0011;
	short TLS_DHE_DSS_WITH_DES_CBC_SHA = 0x0012;
	short TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x0013;
	short TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0014;
	short TLS_DHE_RSA_WITH_DES_CBC_SHA = 0x0015;
	short TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016;
	short TLS_DH_ANON_EXPORT_WITH_RC4_40_MD5 = 0x0017;
	short TLS_DH_ANON_WITH_RC4_128_MD5 = 0x0018;
	short TLS_DH_ANON_EXPORT_WITH_DES40_CBC_SHA = 0x0019;
	short TLS_DH_ANON_WITH_DES_CBC_SHA = 0x001A;
	short TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA = 0x001B;

	// RFC 2712

	short TLS_KRB5_WITH_DES_CBC_SHA = 0x001E;
	short TLS_KRB5_WITH_3DES_EDE_CBC_SHA = 0x001F;
	short TLS_KRB5_WITH_RC4_128_SHA = 0x0020;
	short TLS_KRB5_WITH_IDEA_CBC_SHA = 0x0021;
	short TLS_KRB5_WITH_DES_CBC_MD5 = 0x0022;
	short TLS_KRB5_WITH_3DES_EDE_CBC_MD5 = 0x0023;
	short TLS_KRB5_WITH_RC4_128_MD5 = 0x0024;
	short TLS_KRB5_WITH_IDEA_CBC_MD5 = 0x0025;

	short TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA = 0x0026;
	short TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA = 0x0027;
	short TLS_KRB5_EXPORT_WITH_RC4_40_SHA = 0x0028;
	short TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 = 0x0029;
	short TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5 = 0x002A;
	short TLS_KRB5_EXPORT_WITH_RC4_40_MD5 = 0x002B;

	// RFC 3268

	short TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F;
	short TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x0030;
	short TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x0031;
	short TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032;
	short TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033;
	short TLS_DH_ANON_WITH_AES_128_CBC_SHA = 0x0034;
	short TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035;
	short TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x0036;
	short TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x0037;
	short TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038;
	short TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039;
	short TLS_DH_ANON_WITH_AES_256_CBC_SHA = 0x003A;

	// RFC 5932

	short TLS_RSA_WITH_CAMELLIA_128_CBC_SHA = 0x0041;
	short TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA = 0x0042;
	short TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA = 0x0043;
	short TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA = 0x0044;
	short TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA = 0x0045;
	short TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA = 0x0046;

	short TLS_RSA_WITH_CAMELLIA_256_CBC_SHA = 0x0084;
	short TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA = 0x0085;
	short TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA = 0x0086;
	short TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA = 0x0087;
	short TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA = 0x0088;
	short TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA = 0x0089;

	short TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BA;
	short TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BB;
	short TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BC;
	short TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BD;
	short TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BE;
	short TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BF;

	short TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C0;
	short TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C1;
	short TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C2;
	short TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C3;
	short TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C4;
	short TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C5;

	// RFC 4162

	short TLS_RSA_WITH_SEED_CBC_SHA = 0x0096;
	short TLS_DH_DSS_WITH_SEED_CBC_SHA = 0x0097;
	short TLS_DH_RSA_WITH_SEED_CBC_SHA = 0x0098;
	short TLS_DHE_DSS_WITH_SEED_CBC_SHA = 0x0099;
	short TLS_DHE_RSA_WITH_SEED_CBC_SHA = 0x009A;
	short TLS_DH_ANON_WITH_SEED_CBC_SHA = 0x009B;

	// RFC 4279

	short TLS_PSK_WITH_RC4_128_SHA = 0x008A;
	short TLS_PSK_WITH_3DES_EDE_CBC_SHA = 0x008B;
	short TLS_PSK_WITH_AES_128_CBC_SHA = 0x008C;
	short TLS_PSK_WITH_AES_256_CBC_SHA = 0x008D;
	short TLS_DHE_PSK_WITH_RC4_128_SHA = 0x008E;
	short TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA = 0x008F;
	short TLS_DHE_PSK_WITH_AES_128_CBC_SHA = 0x0090;
	short TLS_DHE_PSK_WITH_AES_256_CBC_SHA = 0x0091;
	short TLS_RSA_PSK_WITH_RC4_128_SHA = 0x0092;
	short TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA = 0x0093;
	short TLS_RSA_PSK_WITH_AES_128_CBC_SHA = 0x0094;
	short TLS_RSA_PSK_WITH_AES_256_CBC_SHA = 0x0095;

	// RFC 4492

	short TLS_ECDH_ECDSA_WITH_NULL_SHA = (short) 0xC001;
	short TLS_ECDH_ECDSA_WITH_RC4_128_SHA = (short) 0xC002;
	short TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA = (short) 0xC003;
	short TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA = (short) 0xC004;
	short TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA = (short) 0xC005;
	short TLS_ECDHE_ECDSA_WITH_NULL_SHA = (short) 0xC006;
	short TLS_ECDHE_ECDSA_WITH_RC4_128_SHA = (short) 0xC007;
	short TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA = (short) 0xC008;
	short TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = (short) 0xC009;
	short TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = (short) 0xC00A;
	short TLS_ECDH_RSA_WITH_NULL_SHA = (short) 0xC00B;
	short TLS_ECDH_RSA_WITH_RC4_128_SHA = (short) 0xC00C;
	short TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA = (short) 0xC00D;
	short TLS_ECDH_RSA_WITH_AES_128_CBC_SHA = (short) 0xC00E;
	short TLS_ECDH_RSA_WITH_AES_256_CBC_SHA = (short) 0xC00F;
	short TLS_ECDHE_RSA_WITH_NULL_SHA = (short) 0xC010;
	short TLS_ECDHE_RSA_WITH_RC4_128_SHA = (short) 0xC011;
	short TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA = (short) 0xC012;
	short TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = (short) 0xC013;
	short TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = (short) 0xC014;
	short TLS_ECDH_ANON_WITH_NULL_SHA = (short) 0xC015;
	short TLS_ECDH_ANON_WITH_RC4_128_SHA = (short) 0xC016;
	short TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA = (short) 0xC017;
	short TLS_ECDH_ANON_WITH_AES_128_CBC_SHA = (short) 0xC018;
	short TLS_ECDH_ANON_WITH_AES_256_CBC_SHA = (short) 0xC019;

	// RFC 4785

	short TLS_PSK_WITH_NULL_SHA = 0x002C;
	short TLS_DHE_PSK_WITH_NULL_SHA = 0x002D;
	short TLS_RSA_PSK_WITH_NULL_SHA = 0x002E;

	// RFC 5054

	short TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA = (short) 0xC01A;
	short TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = (short) 0xC01B;
	short TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA = (short) 0xC01C;
	short TLS_SRP_SHA_WITH_AES_128_CBC_SHA = (short) 0xC01D;
	short TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = (short) 0xC01E;
	short TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA = (short) 0xC01F;
	short TLS_SRP_SHA_WITH_AES_256_CBC_SHA = (short) 0xC020;
	short TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = (short) 0xC021;
	short TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA = (short) 0xC022;

	// RFC 5246

	short TLS_RSA_WITH_NULL_SHA256 = 0x003B;
	short TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C;
	short TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D;
	short TLS_DH_DSS_WITH_AES_128_CBC_SHA256 = 0x003E;
	short TLS_DH_RSA_WITH_AES_128_CBC_SHA256 = 0x003F;
	short TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x0040;
	short TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067;
	short TLS_DH_DSS_WITH_AES_256_CBC_SHA256 = 0x0068;
	short TLS_DH_RSA_WITH_AES_256_CBC_SHA256 = 0x0069;
	short TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x006A;
	short TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B;
	short TLS_DH_ANON_WITH_AES_128_CBC_SHA256 = 0x006C;
	short TLS_DH_ANON_WITH_AES_256_CBC_SHA256 = 0x006D;

	// RFC 5288

	short TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C;
	short TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D;
	short TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E;
	short TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F;
	short TLS_DH_RSA_WITH_AES_128_GCM_SHA256 = 0x00A0;
	short TLS_DH_RSA_WITH_AES_256_GCM_SHA384 = 0x00A1;
	short TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 = 0x00A2;
	short TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x00A3;
	short TLS_DH_DSS_WITH_AES_128_GCM_SHA256 = 0x00A4;
	short TLS_DH_DSS_WITH_AES_256_GCM_SHA384 = 0x00A5;
	short TLS_DH_ANON_WITH_AES_128_GCM_SHA256 = 0x00A6;
	short TLS_DH_ANON_WITH_AES_256_GCM_SHA384 = 0x00A7;

	// RFC 5289

	short TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = (short) 0xC023;
	short TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = (short) 0xC024;
	short TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = (short) 0xC025;
	short TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = (short) 0xC026;
	short TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = (short) 0xC027;
	short TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = (short) 0xC028;
	short TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 = (short) 0xC029;
	short TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 = (short) 0xC02A;
	short TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = (short) 0xC02B;
	short TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = (short) 0xC02C;
	short TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = (short) 0xC02D;
	short TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = (short) 0xC02E;
	short TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = (short) 0xC02F;
	short TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = (short) 0xC030;
	short TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 = (short) 0xC031;
	short TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 = (short) 0xC032;

	// RFC 5487

	short TLS_PSK_WITH_AES_128_GCM_SHA256 = 0x00A8;
	short TLS_PSK_WITH_AES_256_GCM_SHA384 = 0x00A9;
	short TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 = 0x00AA;
	short TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 = 0x00AB;
	short TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 = 0x00AC;
	short TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 = 0x00AD;
	short TLS_PSK_WITH_AES_128_CBC_SHA256 = 0x00AE;
	short TLS_PSK_WITH_AES_256_CBC_SHA384 = 0x00AF;
	short TLS_PSK_WITH_NULL_SHA256 = 0x00B0;
	short TLS_PSK_WITH_NULL_SHA384 = 0x00B1;
	short TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 = 0x00B2;
	short TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 = 0x00B3;
	short TLS_DHE_PSK_WITH_NULL_SHA256 = 0x00B4;
	short TLS_DHE_PSK_WITH_NULL_SHA384 = 0x00B5;
	short TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 = 0x00B6;
	short TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 = 0x00B7;
	short TLS_RSA_PSK_WITH_NULL_SHA256 = 0x00B8;
	short TLS_RSA_PSK_WITH_NULL_SHA384 = 0x00B9;

	// RFC 5489

	short TLS_ECDHE_PSK_WITH_RC4_128_SHA = (short) 0xC033;
	short TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA = (short) 0xC034;
	short TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA = (short) 0xC035;
	short TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA = (short) 0xC036;
	short TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 = (short) 0xC037;
	short TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 = (short) 0xC038;
	short TLS_ECDHE_PSK_WITH_NULL_SHA = (short) 0xC039;
	short TLS_ECDHE_PSK_WITH_NULL_SHA256 = (short) 0xC03A;
	short TLS_ECDHE_PSK_WITH_NULL_SHA384 = (short) 0xC03B;

	// RFC 5746

	short TLS_EMPTY_RENEGOTIATION_INFO_SCSV = 0x00FF;

	// RFC 6209

	short TLS_RSA_WITH_ARIA_128_CBC_SHA256 = (short) 0xC03C;
	short TLS_RSA_WITH_ARIA_256_CBC_SHA384 = (short) 0xC03D;
	short TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256 = (short) 0xC03E;
	short TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384 = (short) 0xC03F;
	short TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256 = (short) 0xC040;
	short TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384 = (short) 0xC041;
	short TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256 = (short) 0xC042;
	short TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384 = (short) 0xC043;
	short TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256 = (short) 0xC044;
	short TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384 = (short) 0xC045;
	short TLS_DH_ANON_WITH_ARIA_128_CBC_SHA256 = (short) 0xC046;
	short TLS_DH_ANON_WITH_ARIA_256_CBC_SHA384 = (short) 0xC047;

	short TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256 = (short) 0xC048;
	short TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384 = (short) 0xC049;
	short TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256 = (short) 0xC04A;
	short TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384 = (short) 0xC04B;
	short TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256 = (short) 0xC04C;
	short TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384 = (short) 0xC04D;
	short TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256 = (short) 0xC04E;
	short TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384 = (short) 0xC04F;

	short TLS_RSA_WITH_ARIA_128_GCM_SHA256 = (short) 0xC050;
	short TLS_RSA_WITH_ARIA_256_GCM_SHA384 = (short) 0xC051;
	short TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256 = (short) 0xC052;
	short TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384 = (short) 0xC053;
	short TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256 = (short) 0xC054;
	short TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384 = (short) 0xC055;
	short TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256 = (short) 0xC056;
	short TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384 = (short) 0xC057;
	short TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256 = (short) 0xC058;
	short TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384 = (short) 0xC059;
	short TLS_DH_ANON_WITH_ARIA_128_GCM_SHA256 = (short) 0xC05A;
	short TLS_DH_ANON_WITH_ARIA_256_GCM_SHA384 = (short) 0xC05B;

	short TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 = (short) 0xC05C;
	short TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 = (short) 0xC05D;
	short TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 = (short) 0xC05E;
	short TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 = (short) 0xC05F;
	short TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 = (short) 0xC060;
	short TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 = (short) 0xC061;
	short TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 = (short) 0xC062;
	short TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 = (short) 0xC063;

	short TLS_PSK_WITH_ARIA_128_CBC_SHA256 = (short) 0xC064;
	short TLS_PSK_WITH_ARIA_256_CBC_SHA384 = (short) 0xC065;
	short TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256 = (short) 0xC066;
	short TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384 = (short) 0xC067;
	short TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256 = (short) 0xC068;
	short TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384 = (short) 0xC069;
	short TLS_PSK_WITH_ARIA_128_GCM_SHA256 = (short) 0xC06A;
	short TLS_PSK_WITH_ARIA_256_GCM_SHA384 = (short) 0xC06B;
	short TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256 = (short) 0xC06C;
	short TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384 = (short) 0xC06D;
	short TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256 = (short) 0xC06E;
	short TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384 = (short) 0xC06F;
	short TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256 = (short) 0xC070;
	short TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384 = (short) 0xC071;

	// RFC 6367

	short TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 = (short) 0xC072;
	short TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 = (short) 0xC073;
	short TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 = (short) 0xC074;
	short TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 = (short) 0xC075;
	short TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 = (short) 0xC076;
	short TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 = (short) 0xC077;
	short TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 = (short) 0xC078;
	short TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 = (short) 0xC079;

	short TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC07A;
	short TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC07B;
	short TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC07C;
	short TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC07D;
	short TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC07E;
	short TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC07F;
	short TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC080;
	short TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC081;
	short TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC082;
	short TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC083;
	short TLS_DH_ANON_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC084;
	short TLS_DH_ANON_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC085;
	short TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC086;
	short TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC087;
	short TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC088;
	short TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC089;
	short TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC08A;
	short TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC08B;
	short TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC08C;
	short TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC08D;

	short TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC08E;
	short TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC08F;
	short TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC090;
	short TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC091;
	short TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 = (short) 0xC092;
	short TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 = (short) 0xC093;
	short TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 = (short) 0xC094;
	short TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 = (short) 0xC095;
	short TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 = (short) 0xC096;
	short TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 = (short) 0xC097;
	short TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 = (short) 0xC098;
	short TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 = (short) 0xC099;
	short TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 = (short) 0xC09A;
	short TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 = (short) 0xC09B;

	// RFC 6655

	short TLS_RSA_WITH_AES_128_CCM = (short) 0xC09C;
	short TLS_RSA_WITH_AES_256_CCM = (short) 0xC09D;
	short TLS_DHE_RSA_WITH_AES_128_CCM = (short) 0xC09E;
	short TLS_DHE_RSA_WITH_AES_256_CCM = (short) 0xC09F;
	short TLS_RSA_WITH_AES_128_CCM_8 = (short) 0xC0A0;
	short TLS_RSA_WITH_AES_256_CCM_8 = (short) 0xC0A1;
	short TLS_DHE_RSA_WITH_AES_128_CCM_8 = (short) 0xC0A2;
	short TLS_DHE_RSA_WITH_AES_256_CCM_8 = (short) 0xC0A3;
	short TLS_PSK_WITH_AES_128_CCM = (short) 0xC0A4;
	short TLS_PSK_WITH_AES_256_CCM = (short) 0xC0A5;
	short TLS_DHE_PSK_WITH_AES_128_CCM = (short) 0xC0A6;
	short TLS_DHE_PSK_WITH_AES_256_CCM = (short) 0xC0A7;
	short TLS_PSK_WITH_AES_128_CCM_8 = (short) 0xC0A8;
	short TLS_PSK_WITH_AES_256_CCM_8 = (short) 0xC0A9;
	short TLS_PSK_DHE_WITH_AES_128_CCM_8 = (short) 0xC0AA;
	short TLS_PSK_DHE_WITH_AES_256_CCM_8 = (short) 0xC0AB;

	// RFC 7251

	short TLS_ECDHE_ECDSA_WITH_AES_128_CCM = (short) 0xC0AC;
	short TLS_ECDHE_ECDSA_WITH_AES_256_CCM = (short) 0xC0AD;
	short TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 = (short) 0xC0AE;
	short TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 = (short) 0xC0AF;

	// RFC 7507

	short TLS_FALLBACK_SCSV = 0x5600;

	// RFC 7905

	short TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = (short) 0xCCA8;
	short TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = (short) 0xCCA9;
	short TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = (short) 0xCCAA;
	short TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 = (short) 0xCCAB;
	short TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = (short) 0xCCAC;
	short TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = (short) 0xCCAD;
	short TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 = (short) 0xCCAE;

	// RFC 8442

	short TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256 = (short) 0xD001;
	short TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384 = (short) 0xD002;
	short TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256 = (short) 0xD003;
	short TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256 = (short) 0xD005;

	/*-
	 * 1.3
	 * CipherSuite TLS_AEAD_HASH = VALUE;
	 * +-----------+------------------------------------------------+
	 * | Component | Contents                                       |
	 * +-----------+------------------------------------------------+
	 * | TLS       | The string "TLS"                               |
	 * | AEAD      | The AEAD algorithm used for record protection  |
	 * | HASH      | The hash algorithm used with HKDF              |
	 * | VALUE     | The two-byte ID assigned for this cipher suite |
	 * +-----------+------------------------------------------------+
	 */

	// RFC 8446

	short TLS_AES_128_GCM_SHA256 = 0x1301;
	short TLS_AES_256_GCM_SHA384 = 0x1302;
	short TLS_CHACHA20_POLY1305_SHA256 = 0x1303;
	short TLS_AES_128_CCM_SHA256 = 0x1304;
	short TLS_AES_128_CCM_8_SHA256 = 0x1305;

	// RFC 8998

	short TLS_SM4_GCM_SM3 = 0x00C6;
	short TLS_SM4_CCM_SM3 = 0x00C7;

	// RFC 9189

	short TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC = (short) 0xC100;
	short TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC = (short) 0xC101;
	short TLS_GOSTR341112_256_WITH_28147_CNT_IMIT = (short) 0xC102;

	short[] V10 = new short[] { //
			TLS_RSA_WITH_NULL_MD5, //
			TLS_RSA_WITH_NULL_SHA, //
			TLS_RSA_EXPORT_WITH_RC4_40_MD5, //
			TLS_RSA_WITH_RC4_128_MD5, //
			TLS_RSA_WITH_RC4_128_SHA, //
			TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5, //
			TLS_RSA_WITH_IDEA_CBC_SHA, //
			TLS_RSA_EXPORT_WITH_DES40_CBC_SHA, //
			TLS_RSA_WITH_DES_CBC_SHA, //
			TLS_RSA_WITH_3DES_EDE_CBC_SHA, //

			TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA, //
			TLS_DH_DSS_WITH_DES_CBC_SHA, //
			TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA, //
			TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA, //
			TLS_DH_RSA_WITH_DES_CBC_SHA, //
			TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA, //
			TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, //
			TLS_DHE_DSS_WITH_DES_CBC_SHA, //
			TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, //
			TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, //
			TLS_DHE_RSA_WITH_DES_CBC_SHA, //
			TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, //

			TLS_DH_ANON_EXPORT_WITH_RC4_40_MD5, //
			TLS_DH_ANON_WITH_RC4_128_MD5, //
			TLS_DH_ANON_EXPORT_WITH_DES40_CBC_SHA, //
			TLS_DH_ANON_WITH_DES_CBC_SHA, //
			TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA,//
	};

	short[] V11 = new short[] { //
			TLS_RSA_WITH_NULL_MD5, //
			TLS_RSA_WITH_NULL_SHA, //
			TLS_RSA_WITH_RC4_128_MD5, //
			TLS_RSA_WITH_RC4_128_SHA, //
			TLS_RSA_WITH_IDEA_CBC_SHA, //
			TLS_RSA_WITH_DES_CBC_SHA, //
			TLS_RSA_WITH_3DES_EDE_CBC_SHA, //

			TLS_DH_DSS_WITH_DES_CBC_SHA, //
			TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA, //
			TLS_DH_RSA_WITH_DES_CBC_SHA, //
			TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA, //
			TLS_DHE_DSS_WITH_DES_CBC_SHA, //
			TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, //
			TLS_DHE_RSA_WITH_DES_CBC_SHA, //
			TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,//
	};

	short[] V12 = new short[] { //
			TLS_RSA_WITH_NULL_MD5, //
			TLS_RSA_WITH_NULL_SHA, //
			TLS_RSA_WITH_NULL_SHA256, //
			TLS_RSA_WITH_RC4_128_MD5, //
			TLS_RSA_WITH_RC4_128_SHA, //
			TLS_RSA_WITH_3DES_EDE_CBC_SHA, //
			TLS_RSA_WITH_AES_128_CBC_SHA, //
			TLS_RSA_WITH_AES_256_CBC_SHA, //
			TLS_RSA_WITH_AES_128_CBC_SHA256, //
			TLS_RSA_WITH_AES_256_CBC_SHA256, //

			TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA, //
			TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA, //
			TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, //
			TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, //
			TLS_DH_DSS_WITH_AES_128_CBC_SHA, //
			TLS_DH_RSA_WITH_AES_128_CBC_SHA, //
			TLS_DHE_DSS_WITH_AES_128_CBC_SHA, //
			TLS_DHE_RSA_WITH_AES_128_CBC_SHA, //
			TLS_DH_DSS_WITH_AES_256_CBC_SHA, //
			TLS_DH_RSA_WITH_AES_256_CBC_SHA, //
			TLS_DHE_DSS_WITH_AES_256_CBC_SHA, //
			TLS_DHE_RSA_WITH_AES_256_CBC_SHA, //
			TLS_DH_DSS_WITH_AES_128_CBC_SHA256, //
			TLS_DH_RSA_WITH_AES_128_CBC_SHA256, //
			TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, //
			TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, //
			TLS_DH_DSS_WITH_AES_256_CBC_SHA256, //
			TLS_DH_RSA_WITH_AES_256_CBC_SHA256, //
			TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, //
			TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, //

			TLS_DH_ANON_WITH_RC4_128_MD5, //
			TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA, //
			TLS_DH_ANON_WITH_AES_128_CBC_SHA, //
			TLS_DH_ANON_WITH_AES_256_CBC_SHA, //
			TLS_DH_ANON_WITH_AES_128_CBC_SHA256, //
			TLS_DH_ANON_WITH_AES_256_CBC_SHA256,//
	};

	static String name(short suite) {
		for (int i = 0; i < CipherSuiteType.values().length; i++) {
			if (suite == CipherSuiteType.values()[i].code()) {
				return CipherSuiteType.values()[i].name();
			}
		}
		return "UNKNOWN";
	}

	static short name(String suite) {
		final CipherSuiteType cst = CipherSuiteType.valueOf(suite);
		if (cst != null) {
			return cst.code();
		}
		return -1;
	}
}